import * as XLSX from 'xlsx';

// export interface sheetHd {
//     h?: string,
//     r?: string,
//     t?: string,
//     v: string,
//     w?: string
// }

// enum letterToNumber {
//     "A",
//     "B",
//     "C",
//     "D",
//     "E",
//     "F",
//     "G",
//     "H",
//     "I",
//     "J",
//     "K",
//     "L",
//     "M",
//     "N",
//     "O",
//     "P",
//     "Q",
//     "R",
//     "S",
//     "T",
//     "U",
//     "V",
//     "W",
//     "X",
//     "Y",
//     "Z",
//     "AA",
//     "AB",
//     "AC",
//     "AD",
//     "AE",
//     "AF",
//     "AG",
//     "AH",
//     "AI",
//     "AJ",
//     "AK",
//     "AL",
//     "AM",
//     "AN",
//     "AO",
//     "AP",
//     "AQ",
//     "AR",
//     "AS",
//     "AT",
//     "AU",
//     "AV",
//     "AW",
//     "AX",
//     "AY",
//     "AZ"
// }
const letterToNumberMap = {
  'A': 1,
  'B': 2,
  'C': 3,
  'D': 4,
  'E': 5,
  'F': 6,
  'G': 7,
  'H': 8,
  'I': 9,
  'J': 10,
  'K': 11,
  'L': 12,
  'M': 13,
  'N': 14,
  'O': 15,
  'P': 16
  // "Q",
  // "R",
  // "S",
  // "T",
  // "U",
  // "V",
  // "W",
  // "X",
  // "Y",
  // "Z",
  // "AA",
  // "AB",
  // "AC",
  // "AD",
  // "AE",
  // "AF",
  // "AG",
  // "AH",
  // "AI",
  // "AJ",
  // "AK",
  // "AL",
  // "AM",
  // "AN",
  // "AO",
  // "AP",
  // "AQ",
  // "AR",
  // "AS",
  // "AT",
  // "AU",
  // "AV",
  // "AW",
  // "AX",
  // "AY",
  // "AZ"
}

export const getExcelData = function(file) {
  return new Promise((resolve, reject) => {
    readFileForWorkbook(file).then(wb => {
      resolve(formatData(wb))
    }).catch((e) => {
      console.log(e)
    })
  })
}

const readFileForWorkbook = (file) => {
  return new Promise((resolve, reject) => {
    const reader = new FileReader()
    let wb
    reader.onload = res => {
      const data = res.target.result
      wb = XLSX.read(data, {
        type: 'binary'
      })
      resolve(wb)
    }
    reader.onerror = e => {
      reject(e)
    }
    reader.readAsBinaryString(file)
  })
}

const formatData = ({ Sheets }) => {
  // console.log(Sheets,'--')
  // 需要处理的 sheet
  const list = Object.values(Sheets).filter((n) => n['!ref'])
  const result = list.map((element) => {
    // console.log(element,'element')
    return formatDataSheet(element)
  })
  // console.log(result,'---')
  return result
}

// 处理单个sheet
const formatDataSheet = (sheet) => {
  // 所有行数据
  const list = {}
  Object.keys(sheet).filter((n) => !n.includes('!')).forEach(element => {
    const { hr, hd, str } = splitHrHd(element)
    if (hr === 1) return
    if (list[hr]) {
      list[hr][letterToNumberMap[hd]] = sheet[str]
    } else {
      list[hr] = []
      list[hr][letterToNumberMap[hd]] = sheet[str]
    }
  })
  // console.log(list,'list')
  return list
}

// 拆分行列坐标
const splitHrHd = (str) => {
  const letter = (str.match(/^[a-z|A-Z]+/gi))[0]
  const num = (str.match(/\d+$/gi))[0]
  return {
    str,
    hr: num,
    hd: letter
  }
}
